package com.zyl.blog.rbac.web.controller;


import com.zyl.blog.common.response.Result;
import com.zyl.blog.common.enums.MessageEnum;
import com.zyl.blog.common.utils.Extreme.MessageUtils;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Locale;

/**
 * @version v1.0
 * @ProjectName: Personal_Blog_Server
 * @Package: com.zyl.blog.rbac.web.controller
 * @ClassName: CacheController
 * @Description:
 * @Author FinalFantasy
 * @Date 2025/9/12-09:08
 */
@RequiredArgsConstructor
@RestController
@RequestMapping("/cache/")
public class CacheController {

    /**
     * 手动清理所有消息缓存（生产环境可加权限控制）
     *
     * @return {@link Result }<{@link ? }>
     */
    @PostMapping("clear/message")
    public Result<?> clearMessageCache() {
        MessageUtils.clearAllCache();
        return Result.ok(MessageUtils.getMessage(MessageEnum.COMMON_SUCCESS));
    }

    /**
     * 清理指定Code的缓存（如仅清理file模块的消息）
     *
     * @return {@link Result }<{@link ? }>
     */
    @PostMapping("clear/message/file")
    public Result<?> clearFileMessageCache() {
        MessageUtils.clearCacheByCode("file.upload.success");
        return Result.ok("文件模块消息缓存已清理");
    }

    /**
     * 扩展：清理指定Code的指定Locale缓存（示例：只清理file模块的英文缓存）
     *
     * @return {@link Result }<{@link ? }>
     */
    @PostMapping("clear/message/file/en")
    public Result<?> clearFileEnMessageCache() {
        // 传code + Locale.US，只清理英文缓存
        MessageUtils.clearCacheByCode("file.upload.success", Locale.US);
        return Result.ok("文件模块「文件上传成功」英文缓存已清理");
    }

    /**
     * 清理整个模块的所有消息缓存（示例：清理file模块的所有消息）
     *
     * @return {@link Result }<{@link ? }>
     */
    @PostMapping("clear/message/file/all")
    public Result<?> clearAllFileMessageCache() {
        // 调用MessageUtils的公共方法，传入模块前缀（"file."）
        MessageUtils.clearCacheByPrefix("file.");
        return Result.ok("文件模块所有消息缓存已清理");
    }

    /**
     * 扩展：清理多个模块的缓存（示例：同时清理auth和task模块）
     *
     * @return {@link Result }<{@link ? }>
     */
    @PostMapping("clear/message/modules")
    public Result<?> clearMultiModuleCache() {
        MessageUtils.clearCacheByPrefix("auth.");  // 清理auth模块
        MessageUtils.clearCacheByPrefix("task.");  // 清理task模块
        return Result.ok("auth和task模块消息缓存已清理");
    }

    @PostMapping("test/login")
    public Result<?> testLogin() {
        return Result.ok(MessageUtils.getMessage(MessageEnum.AUTH_LOGIN_FAILURE, "用户1"));
    }
}
